<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      
      // 为了解决回调地狱
      setTimeout((e) => {
        let b = 5;
        setTimeout((i) => {
          let c = b + 2;
          setTimeout((i) => {
            let c = b + 2;
            setTimeout((i) => {
              let c = b + 2;
              setTimeout((i) => {
                let c = b + 2;
                setTimeout((i) => {
                  let c = b + 2;
                  setTimeout((i) => {
                    let c = b + 2;
                    setTimeout((i) => {
                      let c = b + 2;
                      setTimeout((i) => {
                        let c = b + 2;
                        setTimeout((i) => {
                          let c = b + 2;
                        }, 1000);
                      }, 1000);
                    }, 1000);
                  }, 1000);
                }, 1000);
              }, 1000);
            }, 1000);
          }, 1000);
        }, 1000);
      }, 1500);

      // promise 是js中的一个类 用来处理异步操作的对象，代表尚未完成但最终会完成或失败的操作，目的是写起来更加优雅
    //   promise:具有三种状态：pending(待定),fulfilled(已成功)，rejected(已失败)
    // 两种转换途径 待定=>已成功  、 待定=>已失败
    // 通过.then的方式来解析promise中的成功或失败的值
    // 写法
    // .then(成功的回调函数，失败的回调函数)
      new Promise((reslove,reject)=>{
        // reslove:用来传递成功的结果
        // reslove(123)
        // reject:用来传递失败的结果
        reject(213)

      }).then(res=>{
        // 成功的回调
        console.log(res,'res');
      },rej=>{
        // 失败的回调
        console.log(rej,'rej');
        

      })

      new Promise((reslove,reject)=>{
        // resolve:用来传递成功的结果
        // reslove(123)
        // reject:用来传递失败的结果
        reject(213)

      }).then(res=>{
        console.log(res,'res');
      }).catch(err=>{
        console.log(err,'err');
      })

    //   基于promise的封装
    function ajax(params) {
        return new Promise((res,rej)=>{
            res(456789)
        })
    }

    ajax()
    .then(res=>{
        console.log(res,'ajaxres');
        return new Promise((reslove,reject)=>{
            reslove(666)
        })
        
    }).then(res=>{
        console.log(res,'thenres');
        
    })
    // .then 也具有返回值，返回值是promise 允许链式调用


    new Promise((reslove,reject)=>{
        setTimeout(o=>{
            console.log('cccc');
            reslove()
        },2000)
    })
    .then(()=>{
        return new Promise((reslove,reject)=>{
        setTimeout(o=>{
            console.log('cccc','3');
            reslove()
        },3000)
    })
    })
    .then(()=>{
        return new Promise((reslove,reject)=>{
        setTimeout(o=>{
            console.log('cccc','4');
            reslove()
        },4000)
    })
    })


      

    </script>
  </body>
</html>
